<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 方法重写   子类在继承父类的时候，有时候需要改写父类的方法(直接在子类中重写书写这个方法)

        // 面向对象的封装的时候
        //     全局变量改写成属性  --- 内部方法中的变量依然是变量


        // 类的静态属性和方法

        // 闭包
        //    函数中嵌套了函数
        //    每层函数访问了外层函数的局部变量


        // 沙箱模式

        // 防抖和节流


    // 闭包面试题
    function fun(n, o) {
      console.log(o)

      const obj = {
        fun: function (m) {
          return fun(m, n)
        }
      }

      return obj
    }

    var res = fun(0);
    console.log(res.fun(1));
    console.log(res.fun(2));
    console.log(res.fun(3));






    // function fn(n, o) {
    //   console.log(o)

    //   const obj = {
    //     fun: function (m) {
    //       return fn(m, n)
    //     }
    //   }

    //   return obj
    // }


    // var res = fn(0);

    // // fn是需要2个参数  n=0  o 
    // //    undefined
    // // res = obj

    // console.log(res.fun(1));
    // // res.fun   m = 1    fn(1,0)
    // //    0    

    // console.log(res.fun(2));
    // // m = 2   fn(2,0)
    // //    0


    // console.log(res.fun(3));
    // // m = 3   fn(3,0)
    // //    0


    // console.log(fn(1).fun(4));
    //  n = 1  
    //    undefined
    //  fn(4,1)   
    //     1

    </script>
    
</body>
</html>